const path = require("path");
const resolve = dir => require('path').join(__dirname, dir);
const webpack = require("webpack");
const CompressionPlugin = require("compression-webpack-plugin")
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
  lintOnSave: false,
  publicPath: "",
  assetsDir: "",
  integrity: true,
  outputDir: 'dist',
  productionSourceMap: false,

  chainWebpack: config => {
    // 此处造成页面接口请求两次问题
    // config.entry('polyfill').add('@babel/polyfill')
    // markdown
    config.module
      .rule('md')
      .test(/\.md$/)
      .use('text-loader')
      .loader('text-loader')
      .end()

    config
      .output
      .filename('js/Hansen.[hash:4].js')
    //发布模式
    config.when(process.env.NODE_ENV === 'production',config=>{
      //entry找到默认的打包入口，调用clear则是删除默认的打包入口
      //add添加新的打包入口
      config.entry('app').clear().add('./src/main-prod.js');
      //使用externals设置排除项
      config.set('externals',{
        vue:'Vue',
        'vue-router':'VueRouter',
        axios:'axios',
        echarts:'echarts',
        'vue-i18n': 'VueI18n',
        klinecharts: 'klinecharts'
      });
      //使用插件
      config.plugin('html').tap(args=>{
        //添加参数isProd是否是生产环境
        args[0].isProd = true
        return args
      })
    })
    //开发模式
    config.when(process.env.NODE_ENV === 'development',config=>{
        config.entry('app').clear().add('./src/main-dev.js');
        //使用插件
        config.plugin('html').tap(args=>{
          //添加参数isProd
          args[0].isProd = false;
          return args
      })
    })
  },
  configureWebpack: config => {
    var baseConfig = {
      name: 'name',
      resolve: {
        alias: {
          '@': resolve('src')
        }
      }
    }
    if (process.env.NODE_ENV === 'production') {
      return {
        plugins: [
          new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery',
          }),
          new CompressionPlugin({
            test:/\.js$|\.html$|.\css/, //匹配文件名
            threshold: 10240,//对超过10k的数据压缩
            deleteOriginalAssets: false //不删除源文件
          }),
        ],
        ...baseConfig,
      }
     
    } else {
      return {
        plugins: [
          new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery',
          }),
        ],
        ...baseConfig
      }
    }
  },
  css: {
    modules: false,
    // 是否使用 css 分离插件 ExtractTextPlugin，采用独立样式文件载入，不采用 <style> 方式内联至 html 文件中
    extract: false,//
    sourceMap: false,
    loaderOptions: {
      css: {
      },
      postcss: {
      },
      less: {
        globalVars: {
          bgColor: '#222538',//背景颜色
          borderColor: "#1A1D26",//边框颜色和鲜明的块颜色
          sideColor: "#1C1E2E", // 侧边导航颜色
          deepBg: "#171928", // 深色背景
          hoverColor: "#448EF6",//选中颜色
          fff: "#FFFFFF",//文字白色
          fbSix: "#989EB3",//灰色文字
          height: "calc(100vh -  50px - 48px - 4px)", //内容高度
          red:"#DD3F3F",//红色
          LightRed:"#DF2507",//呼吸灯红色
          green:"#15A76B",//绿色
          LightGreen:"#0BB04F",//呼吸灯绿色
          purple:"#836DFF",//紫色
          blue:"#1E3CD5",//蓝色
          Dark_gray:"#6C7180",//深灰色
          Dark_img: "#242A34",
          DarkYellow: "#928065",
          btn_blue: "#1B59D8",
          btn_yellow: "#F6CA34",
          btn_violet: "#9C36F6",
          btnColor:"#2A2E3C",  //按钮背景色
          loginFontColor:"#B0B0B2",//登录页面字体颜色
          DarkBorderLine:"#0F1018",//深色边框线
          LightBorderLine:'#222538',//浅色边框线
        }
      }
    }
  },
  devServer: {
    port: 88,
    host: "127.0.0.1",
    // disableHostCheck: true,
    // proxy: {
    //   '/api': {
    //     target: 'http://127.0.0.1:88',  // target host
    //     ws: false,  // proxy websockets 
    //     changeOrigin: true,  // needed for virtual hosted sites
    //     pathRewrite: {
    //       '^/api': ''
    //     }
    //   }
    // }
  }
}
